import { create } from 'zustand';
import { devtools } from 'zustand/middleware';
import { persist } from 'zustand/middleware';
import { immer } from 'zustand/middleware/immer';

export interface UserState {
  token: string | null;
  userInfo: unknown;
  updateUserInfo: (userInfo: UserState['userInfo']) => void;
  updateToken: (token: string) => void;
}

// 创建一个名为useUserStore的store，初始值为UserState类型
const useUserStore = create<UserState>()(
  // 使用devtools插件，用于调试
  devtools(
    // 使用persist插件，用于持久化存储
    persist(
      // 使用immer插件，用于不可变数据
      immer<UserState>((set) => ({
        // 初始值为null
        token: null,
        // 更新token的方法
        updateToken: (token) => {
          // 使用set方法更新token
          set((state) => {
            state.token = token;
          });
        },
        // 初始值为一个对象，包含name和age属性
        userInfo: {
          name: 'John', // 初始值
          age: 30,
          avatar: 'https://joeschmoe.io/api/v1/random', // 添加avatar字段
        },
        // 更新userInfo的方法
        updateUserInfo: (userInfo) => {
          // 使用set方法更新userInfo
          set((state) => {
            state.userInfo = userInfo;
          });
        },
      })),
      // 持久化存储的名称
      {
        name: 'user-storage',
      },
    ),
  ),
);

export default useUserStore;
